#include "JoueurLocal_private.h"

#include "Messages.h"
#include "Console.h"

/* Internal */
JoueurLocalExt* joueurLocal_getExt(Joueur* joueur){
	eassert(joueurGetType(joueur) == tjLocal);
	
	return (JoueurLocalExt*)joueur->ext;
}

/* Constructor */
Joueur* newJoueurLocal(){
	Joueur* joueur;
	
	joueur = newJoueur();
	
	conPoserQuestionStr(MES_GETNOM,&joueur->nom);
	if(joueur->nom == NULL) return NULL;
	joueur->askChooseEnnemi = joueurLocalAskChooseEnnemi;
	joueur->askFairePause = joueurLocalAskFairePause;
	joueur->askNextPersonnage = joueurLocalAskNextHero;
	joueur->askUsePouvoir = joueurLocalAskUsePouvoir;
	
	return joueur;
}

/* Destructor */
void freeJoueurLocal(Personnage* perso);

/* Methods */
int joueurLocalAskFairePause(Joueur* joueur){
	eassert(joueur != NULL);
	
	conPrint("Joueur %d : ",joueurGetNumero(joueur));
	return conPoserQuestionON(MES_ASKFAIREPAUSE);
}

int joueurLocalAskUsePouvoir(Joueur* joueur,Pouvoir* pouvoir){
	char* q;
	
	q = emalloc(strlen(MES_ASKFAIREPAUSE) + strlen(pouvoirGetNom(pouvoir)) + 1);
	
	sprintf(q,MES_ASKUSEPOUVOIR,pouvoirGetNom(pouvoir));
	conPrint("Joueur %d : ",joueurGetNumero(joueur));
	return conPoserQuestionON(q);
}

Personnage* joueurLocalAskChooseEnnemi(Joueur* joueur,List* p){
	int choix;
	List* l;
	ListIterator* pIt;
	Personnage* perso;
	
	/* TODO : ajouter un attribut nom aux personnage pour l'affichage */
	l = newList();
	pIt = newListIt(p);
	listItForEach(perso,pIt)
		listInsertLast(l,(char*)persoGetTypeNom(perso));
	deleteListIt(pIt);

	conPrint("Joueur %d : ",joueurGetNumero(joueur));
	choix = conChoisir(MES_CHOOSEENNEMI,l);
	deleteList(l);
	
	return listGetAt(p,choix);
}

Personnage* joueurLocalAskNextHero(Joueur* joueur){
	Personnage* perso;
	int choix;
	List *h,*l;
	
	/* On construit une liste des Héro du joueur */
	h = newList();
	listForEach(perso,joueurGetPersos(joueur))
		if(persoGetType(perso) == tpHero)
			listInsertLast(h,perso);
	
	/* On construit la liste des choix */
	l = newList();
	listForEach(perso,h)
		listInsertLast(l,(char*)persoGetTypeNom(perso));
	
	/* On pose la question */
	choix = conChoisir(MES_CHOOSEHERO,l);
	deleteList(l);
	
	perso = listGetAt(h,choix);
	deleteList(h);
	
	return perso;
}


